const express = require("express");

const fs = require("fs");
const path = require("path");

const { v4: uuidv4 } = require("uuid");
const multer = require("multer");

const router = express.Router();

const userModel = require("../../model/userModel");

const storage = multer.diskStorage({
    // 设置保存文件的路径
    destination: function (req, file, callback) {
        callback(null, "public/upload/");
    },
    filename: function (req, file, callback) {
        // 将保存文件名设置为 字段名 + 时间戳，
        // 比如 logo-1478521468943
        let suffix = file.mimetype.split("/")[1];
        //获取文件格式
        callback(null, file.fieldname + "-" + Date.now() + "." + suffix);
    },
});
// 生成的图片放入upload文件夹下
const upload = multer({ storage: storage });
let { HOST_URL } = require("../../config/host");

// 接口4：修改用户头像（上传图片/预览头像）
router.post("/upload_img", upload.single("photo"), async (req, res) => {
    // console.log(req.file.filename);
    // 定义路径
    let picUrl = `${HOST_URL}/upload/${req.file.filename}`;
    // 返回上传头像文件路径
    res.send({
        code: 200,
        picUrl,
        msg: "用户头像上传成功。",
    });
    // 从请求头对象获取token信息
    // let token = req.headers["token"];
    // 判断用户登录状态
    // 请求需要进行token校验
    // let jwt = new JwtUtil(token);
    // 返回一个对象（包含用户身份）
    // let result = jwt.verifyToken();
    // 验通过执行下一步，否则就返回登陆信息不正确
    // if (result == "err") {
    //     // 提醒用户重新登录
    //     res.send({
    //         code: -1,
    //         msg: "登录已过期,请重新登录。",
    //     });
    // } else {
    //     // 定义路径
    //     let picUrl = `${HOST_URL}/upload/${req.file.filename}`;
    //     // 返回上传头像文件路径
    //     res.send({
    //         code: 200,
    //         picUrl,
    //         msg: "用户头像上传成功。",
    //     });
    // }
});
// 接口5：保存头像路径（图片路径储存在数据库）
router.post("/save_img", async (req, res) => {
    // 从请求头对象获取token信息
    // let token = req.headers["token"];
    // 获取头像路径
    let { user_id, user_nick_name, user_message, user_avators } = req.body;
    // let user_id = result.data;
    // console.log(req.body);
    await userModel
        .modify_avator({ user_id, user_nick_name, user_message, user_avators })
        .then((content) => {
            res.send(content);
        })
        .catch((err) => {
            res.send(err);
        });
    // console.log('user_avator:',user_avator);
    // 判断用户登录状态
    // 请求需要进行token校验
    // let jwt = new JwtUtil(token);
    // 返回一个对象（包含用户身份）
    // let result = jwt.verifyToken();
    // 验通过执行下一步，否则就返回登陆信息不正确
    // if (result == "err") {
    //     // 提醒用户重新登录
    //     res.send({
    //         code: -1,
    //         msg: "登录已过期,请重新登录。",
    //     });
    // } else {
    //     // 调用保存图片路径到数据库的API
    //     let user_id = result.data;
    //     await userModel
    //         .modify_avator(user_id, user_avator)
    //         .then((content) => {
    //             res.send(content);
    //         })
    //         .catch((err) => {
    //             res.send(err);
    //         });
    // }
});
// 接口6：删除头像（删除图片）
router.post("/delete_img", async (req, res) => {
    let { user_avator } = req.body;

    return new Promise((resolve, reject) => {
        //通过slice方法，分割出图片前面的url地址
        let index = user_avator.indexOf("upload");
        // console.log(user_avator);
        // console.log(index);
        if (index > 0) {
            let temp_path = path.join(__dirname, "../../public", user_avator.slice(index));
            // console.log("--->", temp_path);
            // fs.unlink删除文件
            fs.unlink(temp_path, function (error) {
                if (error) {
                    resolve({
                        code: -1,
                        msg: "删除图片失败。",
                    });
                } else {
                    //删除图片文件成功
                    resolve({
                        code: 200,
                        msg: "删除图片成功。",
                    });
                }
            });
        } else {
            res.send({
                code: -1,
                msg: "默认头像不用删除。",
            });
        }
    });
});
// 接口7：获取头像昵称
router.get("/get_avator_nickname", async (req, res) => {
    // 从请求头对象获取token信息
    let token = req.headers["token"] || req.query.token;
    // 判断用户登录状态
    // 请求需要进行token校验
    let jwt = new JwtUtil(token);
    // 返回一个对象（包含用户身份）
    let result = jwt.verifyToken();
    // 验通过执行下一步，否则就返回登陆信息不正确
    if (result == "err") {
        // 提醒用户重新登录
        res.send({
            code: -1,
            msg: "登录已过期,请重新登录。",
        });
    } else {
        // 调用保存图片路径到数据库的API
        let user_id = result.data;
        await userModel
            .get_avator_nickname(user_id)
            .then((content) => {
                res.send(content);
            })
            .catch((err) => {
                res.send(err);
            });
    }
});

//接口1：注册功能
router.post("/register", (req, res) => {
    let { user_acc, user_pwd } = req.body;
    let user_id = uuidv4();
    let user_nick_name = uuidv4().slice(0, 8);
    // console.log(user_id);
    // console.log(user_create_time);
    userModel.register({ user_id, user_acc, user_pwd, user_nick_name }).then((data) => {
        res.send({
            code: 200,
            msg: "用户注册成功",
            data,
        });
    });
});

//接口2：登录功能
router.post("/login", (req, res) => {
    let { user_acc, user_pwd } = req.body;
    userModel
        .login({ user_acc, user_pwd })
        .then((data) => {
            res.send(data);
        })
        .catch((err) => {
            res.send(err);
        });
});

//接口3:添加浏览记录
router.post("/addlook", (req, res) => {
    let { user_id, news_id, news_category, news_tag, news_title, news_img, news_time, news_media, user_avators } = req.body;
    userModel
        .addlook({ user_id, news_id, news_category, news_tag, news_title, news_img, news_time, news_media, user_avators })
        .then((data) => {
            res.send(data);
        })
        .catch((err) => {
            res.send(err);
        });
});

//接口4:删除浏览记录
router.post("/removelook", (req, res) => {
    let { user_id, news_id } = req.body;
    userModel
        .removelook({ user_id, news_id })
        .then((data) => {
            res.send(data);
        })
        .catch((err) => {
            res.send(err);
        });
});

//接口5：获取浏览记录
router.get("/getlook", (req, res) => {
    let { user_id } = req.query;
    userModel
        .getlook({ user_id })
        .then((data) => {
            res.send({
                code: 200,
                msg: "获取浏览记录成功",
                data,
            });
        })
        .catch((err) => {
            res.send({
                code: -1,
                msg: "获取浏览记录失败",
                err,
            });
        });
});

//接口6：获取用户个人信息
router.get("/getuserinfo", (req, res) => {
    let { user_id } = req.query;
    userModel
        .getUserInfo({ user_id })
        .then((data) => {
            res.send({
                code: 200,
                msg: "获取用户信息成功",
                data,
            });
        })
        .catch((err) => {
            res.send({
                code: -1,
                msg: "获取用户信息失败",
                err,
            });
        });
});

//接口7：获取用户发布的新闻
router.get("/getusernews", (req, res) => {
    let { user_id } = req.query;
    userModel.getUserNews({ user_id }).then((data) => {
        res.send({
            code: 200,
            msg: "获取成功",
            data,
        });
    });
});

module.exports = router;
